package org.example.https;

import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.http.FullHttpRequest;

/**
 * @author hh
 * @since 2024/11/2
 */
// 标注一个Handler实例可以被多个通道安全地共享（多个通道的流水线可以加入同一个Handler实例）
// 如果没有加@ChannelHandler.Sharable注解，试图将同一个Handler实例添加到多个ChannelPipeline时，Netty将会抛出异常。
/*
  如何判断一个Handler是否为@Sharable呢？
    ChannelHandlerAdapter提供了实用方法——isSharable()。如果其对
    应的实现加上了@Sharable注解，那么这个方法将返回true，表示它可
    以被添加到多个ChannelPipeline中。
 */
@ChannelHandler.Sharable
public class HttpsEchoHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        FullHttpRequest fullHttpRequest = (FullHttpRequest) msg;
        System.out.println("server received: " + fullHttpRequest.toString());
    }
}
